import { get, post, upload, put, del } from '@/utils/request'
import { setToken, removeToken } from '@/utils/auth'

/**
 * 用户登录
 * @param {Object} data - 登录参数 { username, password }
 * @returns {Promise<{ token: string, userId: number }>}
 */
export function login(data) {
  // 转换参数格式，因为后端使用 @RequestParam
  const params = new URLSearchParams()
  params.append('username', data.username)
  params.append('password', data.password)

  return post('/user/user/login', params, {
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  }).then(response => {
    if (response.token) {
      setToken(response.token)
    }
    return response
  })
}

/**
 * 刷新Token
 * @returns {Promise<{
 *   token: string,
 *   tokenType: string,
 *   expiresIn: number,
 *   refreshToken?: string
 * }>}
 */
export function refreshToken() {
  const refreshToken = localStorage.getItem('refreshToken')
  return post('/user/refresh-token', { refreshToken }).then(response => {
    if (response.token) {
      localStorage.setItem('token', response.token)
      localStorage.setItem('tokenType', response.tokenType || 'Bearer')
      if (response.expiresIn) {
        localStorage.setItem('tokenExpireTime', Date.now() + response.expiresIn * 1000)
      }
      if (response.refreshToken) {
        localStorage.setItem('refreshToken', response.refreshToken)
      }
    }
    return response
  })
}

/**
 * 获取用户信息
 * @returns {Promise<{
 *   id: number,
 *   username: string,
 *   nickname: string,
 *   avatar: string
 * }>}
 */
export function getUserInfo() {
  return get('/user/user/info')
}

/**
 * 用户注册
 * @param {Object} data - 注册参数
 * @returns {Promise}
 */
export function register(data) {
  return post('/user/user/register', data)
}

/**
 * 修改密码
 * @param {Object} data - 密码参数
 * @returns {Promise}
 */
export function changePassword(data) {
  return post('/user/user/change-password', data)
}

/**
 * 重置密码
 * @param {Object} data - 重置参数
 * @returns {Promise}
 */
export function resetPassword(data) {
  return post('/user/user/reset-password', data)
}

/**
 * 退出登录
 * @returns {Promise}
 */
export function logout() {
  return post('/user/user/logout').finally(() => {
    removeToken()
  })
}

// 普通用户登录
export function userLogin(data) {
  // 转换参数格式，因为后端使用 @RequestParam
  const params = new URLSearchParams()
  params.append('username', data.username)
  params.append('password', data.password)
  
  return post('/user/user/login', params, {
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  }).then(response => {
    if (response.token) {
      setToken(response.token)
    }
    return response
  })
}

// 专家登录
export function expertLogin(data) {
  // 转换参数格式，因为后端使用 @RequestParam
  const params = new URLSearchParams()
  params.append('username', data.username)
  params.append('password', data.password)
  
  return post('/expert/login', params, {
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  }).then(response => {
    if (response.token) {
      setToken(response.token)
    }
    return response
  })
}

// 管理员登录
export function adminLogin(data) {
  // 转换参数格式，因为后端使用 @RequestParam
  const params = new URLSearchParams()
  params.append('username', data.username)
  params.append('password', data.password)
  
  return post('/admin/login', params, {
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  }).then(response => {
    if (response.token) {
      setToken(response.token)
    }
    return response
  })
}

/**
 * 上传头像
 * @param {File} file - 头像文件
 * @returns {Promise<{ url: string }>}
 */
export function uploadAvatar(file) {
  const formData = new FormData()
  formData.append('file', file)
  return upload('/user/user/avatar', formData)
}

/**
 * 上传图片
 * @param {File} file - 头像文件
 * @returns {Promise<{ url: string }>}
 */
export function uploadImg(file) {
  const formData = new FormData()
  formData.append('file', file)
  return upload('/user/user/uploadImg', formData)
}

/**
 * 更新用户信息
 * @param {Object} data - 用户信息
 * @returns {Promise}
 */
export function updateUserInfo(data) {
  return post('/user/user/update', data)
}

/**
 * 获取用户列表
 * @param {Object} params - 查询参数 { pageNum, pageSize, username, phone, status }
 */
export function getUserList(params) {
  const searchParams = new URLSearchParams()
  searchParams.append('pageNum', params.pageNum || 1)
  searchParams.append('pageSize', params.pageSize || 10)
  if (params.username) searchParams.append('username', params.username)
  if (params.phone) searchParams.append('phone', params.phone)
  if (params.status !== undefined && params.status !== '') searchParams.append('status', params.status)
  
  return get(`/admin/user/list?${searchParams.toString()}`)
}

/**
 * 获取用户详情
 * @param {number} id - 用户ID
 * @returns {Promise<Object>} 用户详情数据
 */
export function getUserDetail(id) {
  return get(`/admin/user/${id}`).then(response => {
    console.log('用户详情原始响应:', response)
    
    // 如果响应直接就是数据对象（包含用户信息字段）
    if (response && typeof response === 'object' && response.id) {
      return {
        code: 0,
        data: response,
        message: '获取成功'
      }
    }
    
    // 如果是标准响应格式
    if (response && response.code === 0 && response.data) {
      return response
    }
    
    // 处理错误情况
    throw new Error(response?.message || '获取用户详情失败')
  }).catch(error => {
    console.error('获取用户详情接口错误:', error)
    throw error
  })
}

/**
 * 新增用户
 * @param {Object} data - 用户信息
 */
export function addUser(data) {
  return post('/admin/user', data)
}

/**
 * 更新用户信息
 * @param {Object} data - 用户信息
 */
export function updateUser(data) {
  return put('/admin/user', data)
}

/**
 * 删除用户
 * @param {number} id - 用户ID
 */
export function deleteUser(id) {
  return del(`/admin/user/${id}`)
}

/**
 * 更新用户状态
 * @param {number} id - 用户ID
 * @param {number} status - 状态：0-禁用，1-启用
 */
export function updateUserStatus(id, status) {
  return put('/admin/user/status', null, {
    params: { id, status }
  })
}

/**
 * 获取用户的儿童列表
 * @param {number} userId - 用户ID
 * @returns {Promise<Object>} 儿童列表数据
 */
export function getChildrenByUserId(userId) {
  return get(`/admin/user/${userId}/children`)
}

/**
 * 获取儿童详情
 * @param {number} id - 儿童ID
 * @returns {Promise<Object>} 儿童详情数据
 */
export function getChildDetail(id) {
  return get(`/admin/children/${id}`).then(response => {
    console.log('儿童详情原始响应:', response)
    
    // 如果响应直接就是数据对象
    if (response && typeof response === 'object' && response.id) {
      return {
        code: 0,
        data: response,
        message: '获取成功'
      }
    }
    
    // 如果是标准响应格式
    if (response && response.code === 0 && response.data) {
      return response
    }
    
    // 处理错误情况
    throw new Error(response?.message || '获取儿童详情失败')
  }).catch(error => {
    console.error('获取儿童详情接口错误:', error)
    throw error
  })
}

/**
 * 新增儿童
 * @param {Object} data - 儿童信息
 * @returns {Promise<Object>} 
 */
export function addChild(data) {
  return post('/admin/children', data)
}

/**
 * 更新儿童信息
 * @param {Object} data - 儿童信息
 * @returns {Promise<Object>}
 */
export function updateChild(data) {
  return put('/admin/children', data)
}

/**
 * 删除儿童
 * @param {number} id - 儿童ID
 * @returns {Promise<Object>}
 */
export function deleteChild(id) {
  return del(`/admin/children/${id}`)
} 